package com.dynamo.transport.network.practise.channel;

import org.jboss.netty.util.CharsetUtil;

import java.nio.ByteBuffer;

/**
 * @author duanyimiao
 * @create 2018-11-17 9:59 PM
 * @description
 **/
public class EncoderHandler extends SimpleChannelDownstreamHandler {

    @Override
    public void writeMsg(ChannelHandlerContext ctx, MessageEvent e) {
        //TODO 这里只将msg消息转换成ByteBuffer， 实际上是转换成一个统一定义的ChannelBuffer，然后在sink中再将ChannelBuffer转成ByteBuffer写入Channel中
        //同样读取的时候也是将ByteBuffer转换成ChannelBuffer然后交给UpstreamHandler DecodeHandler进行转换成业务对象

        Object msg = e.getMsg();
        //这里默认msg为String类型，实际上不是这样的
        byte[] bytes = ((String)msg).getBytes(CharsetUtil.UTF_8);
        ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
        buffer.put(bytes);
        //TODO 这里是需要新创建一个MessageEvent对象还是直接用原来的传入的对象?
        ctx.sendDownstream(new DefaultMessageEvent(e.getPipelien(),e.getChannel(),buffer));
    }
}
